Large multiple processor computing systems often employ a directory cache. The directory cache stores information regarding copies of memory lines that are stored in the system's various caches. By way of example, the information stored in a directory cache may comprise information indicating 1) where copies of memory lines are stored, 2) whether the memory lines are stored in single or multiple locations, and 3) whether a memory line has been reserved for exclusive access by a particular cache (meaning that the memory line may be subject to modification).
A directory cache can be useful in that it reduces the number of main memory accesses (and particularly writes) that are undertaken solely for the purpose of cache coherency (i.e., it reduces memory accesses that do not result in a memory line actually being updated). This can yield both increased effective memory bandwidth and reduced memory power consumption.
In some directory caches, the identities of caches where a memory line is stored are encoded in a share vector, where each bit of the vector corresponds to a subset of caches in which a memory line may be stored. In this manner, the precise identities of caches in which a memory line is stored may not be known, but the number of caches which need to be notified in the case of a “modify” operation is limited to a subset of a system's caches. The more bits that can be allotted to the share vector, the greater the resolution of the share vector. However, the number of bits that can be allotted to a share vector is often limited by 1) the relatively small number of bits that are allotted to each of a directory cache's entries, and 2) the use of many, if not most, of a directory cache entry's bits for overhead purposes, such as the storage of address tag bits.